package com.study.thread.die;

/*
 * 死锁：要获取的锁被占用，且都不释放等待对方释放，则造成程序无法运行进入阻塞，则死锁
 * 活锁：线程持续操作一个失败的操作，导致无法继续往下执行
 * 饿死：线程调度器通过优先级调度线程，一直有优先级高的线程调度，所以线程低的优先级一直无法得到调用，（但是操作系统的不同可能优先级低的会慢慢提高优先级，然后调度线程）
 */
public class dieLockDemo1 {
    private static Object lock1 = new Object();
    private static Object lock2 = new Object();

    public static void main(String[] args) {
        new Thread(()->{
            while (true){
                synchronized (lock1){
                    try {
                        Thread.sleep(200);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (lock2){
                        System.out.println(Thread.currentThread().getName()+"------");
                    }
                }
            }
        },"线程1").start();

        new Thread(()->{
            while (true){
                synchronized (lock2){
                    try {
                        Thread.sleep(300);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (lock1){
                        System.out.println(Thread.currentThread().getName()+"------");
                    }
                }
            }
        },"线程2").start();
    }

}
